<?php if (! defined('IN_SCRIPT')) { die('Access Denied!'); }

// Данный массив преопределяет действия доступные только модераторам. Если следующие будет
// попытка вызвать эти команды гостём, то пользователь получит сообщение об ошибке
$adminAjaxList = array('ban_ip', 'set_invite_count', 'update_status', 'delete_request', 'delete_tracker');
// Данный массив предопределяет действия, доступные как модераторам, так и обычным пользователям
$userAjaxList = array();
// Считываем значение переменной action и записываем его в одноимённую переменную. Если значение
// этой переменной не установлено, программа установит ей пустое значение, что впоследствии вызовет
// ошибку "Bad Action".
$action = ifsetor($_GET['action'], '');
// Если действие доступно только администраторам
if (in_array($action, $adminAjaxList)) {
    if (! defined('IN_SCRIPT') || ! defined('ADMIN_MODE')) {
        // При попытке вызвать действие гостем либо вне скрипта - выкидываем ошибку
        die('Access Denied!');
    }
// Если действие доступно и администраторам и гостям
} elseif (in_array($action, $userAjaxList)) {
    if (! defined('IN_SCRIPT')) {
        // При попытке вызвать действие вне скрипта - выкидываем ошибку
        die('Access Denied!');
    }
// Если указанное пользователем действие не найдено.
} else {
    die('Bad Action');
}

// Ищем и обрабатыеваем выбранное действие
switch($action) {


/**
 * =================================================================
 *   Блокировка IP адреса
 * =================================================================
 */
case 'ban_ip':
mysql::getInstance()->insert('bans', array('', intval($_POST['ip']), time(), $_POST['reason']));
break;


/**
 * =================================================================
 *   Увеличение и уменьшение количества инвайтов
 * =================================================================
 */
case 'set_invite_count':
// Увеличение количества инвайтов
if (isset($_POST['inc'])) {
    // Количество должно быть меньше 255
    if ($_POST['current'] < 255) {
        // Обновляем количество инвайтов и выводим новое количество
        mysql::getInstance()->update('trackers', array('inviteCount' => intval($_POST['current']) + intval($_POST['inc'])), array('id' => intval($_POST['id'])));
        echo intval($_POST['current']) + intval($_POST['inc']);
    } else {
        // Если инвайтов было 255, ничего не делаем и оставляем 255 инвайтов
        echo '255';
    }
// Уменьшение количества инвайтов
} elseif (isset($_POST['dec'])) {
    // Количество должно быть больше нуля, иначе не от чего будет отнимать
    if ($_POST['current'] > 0) {
        // Обновляем количество инвайтов и выводим новое количество
        mysql::getInstance()->update('trackers', array('inviteCount' => intval($_POST['current']) - intval($_POST['dec'])), array('id' =>  intval($_POST['id'])));
        echo intval($_POST['current']) - intval($_POST['dec']);
    } else {
        // Если инвайтов было 0, ничего не делаем и оставляем 0 инвайтов
        echo '0';
    }
}
break;


/**
 * =================================================================
 *   Обновление основного и дополнительного статусов
 * =================================================================
 */
case 'update_status':
// Если мы собрались обновлять основной статус
if ($_POST['statusType'] == 'status') {
    mysql::getInstance()->update('requests', array('status' => (int)$_POST['status']), array('secret' => $_POST['secret']));
    // Получаем массив с информацией о новом цвете и тексте
    $queryStatus = getRequestStatus($_POST['status']); ?>
    <td style="background-color: <?php echo $queryStatus['color']; ?>;">Статус запроса:</td>
    <td style="background-color: <?php echo $queryStatus['color']; ?>;"><?php echo $queryStatus['text']; ?></td>
<?php
// Если мы будем обновлять дополнительный статус
} elseif ($_POST['statusType'] == 'additionalStatus') {
    // Известные проблемы: символ "&" и все последующие символы в базу данных не добавляются.
    // TODO: Пофиксить это.
    mysql::getInstance()->update('requests', array('response' => mysql_real_escape_string($_POST['status'])), array('secret' => $_POST['secret']));
    ?>
    <td>Сообщение:</td>
    <td><?php echo (!empty($_POST['status'])) ? nl2br(htmlentities($_POST['status'], ENT_COMPAT, 'UTF-8')) : '---' ?></td>
<?php }
break;


/**
 * =================================================================
 *   Удаление запроса
 * =================================================================
 */
case 'delete_request':
echo mysql::getInstance()->query("DELETE FROM `requests` WHERE `id` =" . (int)$_POST['id']) ? 'ok' : 'MySQL Error';
break;


/**
 * =================================================================
 *   Увеличение трекера
 * =================================================================
 */
case 'delete_tracker':
echo mysql::getInstance()->query("DELETE FROM `trackers` WHERE `id` =" . (int)$_POST['id']) ? 'ok' : 'MySQL Error';
break;


}